home *** CD-ROM | disk | FTP | other *** search
/ System Booster / System Booster.iso / Screenblankers / GBlanker / GSource / Blankers / Dragon / blank.c next >
C/C++ Source or Header  |  1996-09-26  |  2KB  |  92 lines

  1. /*
  2.  *  Copyright (c) 1994 Michael D. Bayne.
  3.  *  All rights reserved.
  4.  *
  5.  *  Please see the documentation accompanying the distribution for distribution
  6.  *  and disclaimer information.
  7.  */
  8.  
  9. #include <exec/memory.h>
  10. #include <math.h>
  11.  
  12. #include "/includes.h"
  13.  
  14. Triplet *ColorTable = 0L;
  15.  
  16. VOID Defaults( PrefObject *Prefs )
  17. {
  18.     Prefs[0].po_ModeID = getTopScreenMode();
  19.     Prefs[0].po_Depth = 2;
  20. }
  21.  
  22. LONG Dragon( struct Screen *Scr, SHORT Wid, SHORT Hei )
  23. {
  24.     LONG i, flg_end = OK, xd, yd, mod = 1L << Scr->BitMap.Depth - 1, sx, sy;
  25.     float t = ( float )( RangeRand( 100 ) + 10 ), a = PI - t / 5000;
  26.     float xx, yy, x = 0, y = 0;
  27.     struct RastPort *RP = &( Scr->RastPort );
  28.     
  29.     SetRast( RP, 0 );
  30.     ScreenToFront( Scr );
  31.     
  32.     for( i = 0; i < 1000000 && flg_end == OK; i++ )
  33.     {
  34.         if(!( i % 100 ))
  35.         {
  36.             flg_end = ContinueBlanking();
  37.             ScreenToFront( Scr );
  38.         }
  39.         
  40.         xx = y - sin( x );
  41.         yy = a - x;
  42.         
  43.         xd = Wid / 2 + (SHORT)( 2.0 * x );
  44.         yd = Hei / 2 + (SHORT)( 2.0 * y );
  45.  
  46.         sx = xd - Wid/2;
  47.         sx *= sx;
  48.         sy = yd - Hei/2;
  49.         sy *= sy;
  50.  
  51.         if(( xd >= 0 )&&( yd >= 0 )&&( xd < Wid )&&( yd < Hei ))
  52.         {
  53.             SetAPen( RP, (((sx + sy)*2*mod)/(Hei*Hei)) % mod + 1 );
  54.             WritePixel( RP, xd, yd );
  55.         }
  56.  
  57.         x = xx;
  58.         y = yy;
  59.     }
  60.  
  61.     return flg_end;
  62. }
  63.  
  64. LONG Blank( PrefObject *Prefs )
  65. {
  66.     struct Screen *Scr;
  67.     struct Window *Wnd;
  68.     LONG RetVal;
  69.     
  70.     if( Scr = OpenScreenTags( NULL, SA_Depth, Prefs[0].po_Depth,
  71.                              SA_Quiet, TRUE, SA_DisplayID, Prefs[0].po_ModeID,
  72.                              SA_Behind, TRUE, SA_Overscan, OSCAN_STANDARD,
  73.                              TAG_DONE ))
  74.     {
  75.         SetRGB4(&( Scr->ViewPort ), 0, 0, 0, 0 );
  76.         ColorTable = RainbowPalette( Scr, 0L, 1L, 0L );
  77.         Wnd = BlankMousePointer( Scr );
  78.         
  79.         do
  80.             RetVal = Dragon( Scr, Scr->Width, Scr->Height );
  81.         while( RetVal == OK );
  82.         
  83.         UnblankMousePointer( Wnd );
  84.         RainbowPalette( 0L, ColorTable, 1L, 0L );
  85.         CloseScreen( Scr );
  86.     }
  87.     else
  88.         RetVal = FAILED;
  89.     
  90.     return RetVal;
  91. }
  92.